﻿using System;
using System.Drawing;
using Core.Model.Types;

namespace Core.Controllers.Helpers
{
    //public static class MatrixHelper
    //{
    //    public static Vector3 ConvertFromVector3F(Vector3F vector)
    //    {
    //        return new Vector3(vector.X, vector.Y, vector.Z);
    //    }

    //    public static MatrixF ConvertFromMatrixF(Matrix matrix)
    //    {
    //        return new MatrixF
    //        (
    //            matrix.M11,
    //            matrix.M12,
    //            matrix.M13,
    //            matrix.M14,
    //            matrix.M21,
    //            matrix.M22,
    //            matrix.M23,
    //            matrix.M24,
    //            matrix.M31,
    //            matrix.M32,
    //            matrix.M33,
    //            matrix.M34,
    //            matrix.M41,
    //            matrix.M42,
    //            matrix.M43,
    //            matrix.M44
    //        );
    //    }

    //    /// <summary>
    //    /// Конвертация цветов
    //    /// </summary>
    //    /// <param name="color">Цвет здешний</param>
    //    /// <returns>Цвет в SlimDX</returns>
    //    public static Vector4 ConvertToVector4(Color color)
    //    {
    //        return Convert(color).ToVector4();
    //    }

    //    /// <summary>
    //    /// Конвертация цветов
    //    /// </summary>
    //    /// <param name="color">Цвет здешний</param>
    //    /// <returns>Цвет в SlimDX</returns>
    //    static public Color4 Convert(Color color)
    //    {
    //        return new Color4((float)color.A, (float)color.R, (float)color.G, (float)color.B);
    //    }

    //    public static Vector3 Transform(Vector3 position, Matrix matrix)
    //    {
    //        float num1 = (float)((double)position.X * (double)matrix.M11 + (double)position.Y * (double)matrix.M21 + (double)position.Z * (double)matrix.M31) + matrix.M41;
    //        float num2 = (float)((double)position.X * (double)matrix.M12 + (double)position.Y * (double)matrix.M22 + (double)position.Z * (double)matrix.M32) + matrix.M42;
    //        float num3 = (float)((double)position.X * (double)matrix.M13 + (double)position.Y * (double)matrix.M23 + (double)position.Z * (double)matrix.M33) + matrix.M43;
    //        Vector3 vector3;
    //        vector3.X = num1;
    //        vector3.Y = num2;
    //        vector3.Z = num3;
    //        return vector3;
    //    }

    //    public static MatrixF CreatePerspectiveFieldOfView(float fieldOfView, float aspectRatio, float nearPlaneDistance, float farPlaneDistance)
    //    {
    //        float num1 = 1f/(float) Math.Tan((double) fieldOfView*0.5);
    //        float num2 = num1/aspectRatio;
    //        return new MatrixF(
    //            num2,
    //            0.0f,
    //            0.0f,
    //            0.0f,
    //            0.0f,
    //            num1,
    //            0.0f,
    //            0.0f,
    //            0.0f,
    //            0.0f,
    //            farPlaneDistance/(nearPlaneDistance - farPlaneDistance),
    //            -1f,
    //            0.0f,
    //            0.0f,

    //            (float)
    //            ((double) nearPlaneDistance*(double) farPlaneDistance/
    //             ((double) nearPlaneDistance - (double) farPlaneDistance)),
    //            0.0f);

    //        //return ConvertFromMatrixF(matrix);
    //    }

    //    //public static MatrixF CreateLookAt(Vector3F cameraPosition, Vector3F cameraTarget, Vector3F cameraUpVector)
    //    //{
    //    //    Vector3F vector3_1 = (cameraPosition - cameraTarget).Normalize();// Vector3.Normalize(ConvertFromVector3F(cameraPosition) - ConvertFromVector3F(cameraTarget));
    //    //    Vector3F vector3_2 = Vector3F.Cross(cameraUpVector, vector3_1).Normalize();

    //    //    Vector3F vector1 = Vector3F.Cross(vector3_1, vector3_2);

    //    //    Matrix matrix;
    //    //    matrix.M11 = vector3_2.X;
    //    //    matrix.M12 = vector1.X;
    //    //    matrix.M13 = vector3_1.X;
    //    //    matrix.M14 = 0.0f;
    //    //    matrix.M21 = vector3_2.Y;
    //    //    matrix.M22 = vector1.Y;
    //    //    matrix.M23 = vector3_1.Y;
    //    //    matrix.M24 = 0.0f;
    //    //    matrix.M31 = vector3_2.Z;
    //    //    matrix.M32 = vector1.Z;
    //    //    matrix.M33 = vector3_1.Z;
    //    //    matrix.M34 = 0.0f;
    //    //    matrix.M41 = -Vector3F.Dot(vector3_2, ConvertFromVector3F(cameraPosition));
    //    //    matrix.M42 = -Vector3F.Dot(vector1, ctor3F(cameraPosition));
    //    //    matrix.M43 = -Vector3F.Dot(vector3_1, ConvertFromVector3F(cameraPosition));
    //    //    matrix.M44 = 1f;
    //    //    return ConvertFromMatrixF(matrix);
    //    //}

    //    public static MatrixF CreateRotationX(float radians)
    //    {
    //        float num1 = (float)Math.Cos((double)radians);
    //        float num2 = (float)Math.Sin((double)radians);
    //        Matrix matrix;
    //        matrix.M11 = 1f;
    //        matrix.M12 = 0.0f;
    //        matrix.M13 = 0.0f;
    //        matrix.M14 = 0.0f;
    //        matrix.M21 = 0.0f;
    //        matrix.M22 = num1;
    //        matrix.M23 = num2;
    //        matrix.M24 = 0.0f;
    //        matrix.M31 = 0.0f;
    //        matrix.M32 = -num2;
    //        matrix.M33 = num1;
    //        matrix.M34 = 0.0f;
    //        matrix.M41 = 0.0f;
    //        matrix.M42 = 0.0f;
    //        matrix.M43 = 0.0f;
    //        matrix.M44 = 1f;
    //        return ConvertFromMatrixF(matrix);
    //    }

    //    public static MatrixF CreateRotationY(float radians)
    //    {
    //        float num1 = (float)Math.Cos((double)radians);
    //        float num2 = (float)Math.Sin((double)radians);
    //        Matrix matrix;
    //        matrix.M11 = num1;
    //        matrix.M12 = 0.0f;
    //        matrix.M13 = -num2;
    //        matrix.M14 = 0.0f;
    //        matrix.M21 = 0.0f;
    //        matrix.M22 = 1f;
    //        matrix.M23 = 0.0f;
    //        matrix.M24 = 0.0f;
    //        matrix.M31 = num2;
    //        matrix.M32 = 0.0f;
    //        matrix.M33 = num1;
    //        matrix.M34 = 0.0f;
    //        matrix.M41 = 0.0f;
    //        matrix.M42 = 0.0f;
    //        matrix.M43 = 0.0f;
    //        matrix.M44 = 1f;
    //        return ConvertFromMatrixF(matrix);
    //    }
    //}
}
